部署 faas
faas 是什么?
"Faas" 是 "Function as a Service" 的缩写,意为“函数即服务”或“以函数为基础的服务”。这是一种云计算服务模型,它是 Serverless 架构的一部分。在 Faas 模型中,开发者可以编写单一功能(函数),然后将这些函数上传到云平台,而无需关心底层的服务器和基础设施管理。当函数需要执行时,云平台会自动处理函数的调用和资源分配。
Faas 的主要优势包括:
弹性伸缩: 云平台会根据负载动态地调整底层的资源,确保函数能够快速、高效地执行,而无需手动干预。
按需计费: 开发者只需为实际执行的函数付费,而不必为预留的计算资源付费。这使得成本更加可控和经济高效。
简化部署和管理: 函数作为独立的单元,更容易进行部署、升级和维护。开发者可以专注于编写功能性代码,而无需处理底层的操作系统、网络配置等。
快速开发和迭代: Faas 支持快速开发和迭代,因为开发者只需关注单一函数的逻辑,而不必担心整个应用的复杂性。
在 Faas 模型中,典型的使用场景包括无服务器计算、事件驱动架构、微服务等。 AWS Lambda、Azure Functions 和 Google Cloud Functions 等云平台提供了 Faas 服务。
这里使用的是 OpenFaaS,它是一个开源的 Serverless 平台,可以在任何地方运行,包括公有云、私有云、Kubernetes 等。OpenFaaS 由 Docker 和 Kubernetes 驱动,支持多种编程语言,包括 Go、Node.js、Python、Ruby、PHP、C# 等。
各个模块的介绍
以下是 OpenFaaS 中一些重要的模块及其作用的简要介绍:
Gateway(网关):
- 作用: 接收 HTTP 请求,并将其路由到相应的函数。
- 描述: Gateway 充当着 OpenFaaS 的主要入口点,它负责处理传入的请求,并将其转发给适当的函数进行处理。Gateway 通常与 OpenFaaS UI 集成,使用户能够通过 Web 界面管理函数。
Function(函数):
- 作用: 包含实际的业务逻辑代码,用于处理请求。
- 描述: 函数是用户编写的业务逻辑的核心部分。每个函数都是一个独立的单元,可以独立部署和运行。函数可以使用各种编程语言编写,因为 OpenFaaS 提供了多语言支持。
Watcher(观察器):
- 作用: 监视函数的状态变化,并在需要时触发自动缩放。
- 描述: Watcher 负责监控函数的运行状况,以便根据负载情况进行动态的伸缩。当函数的请求量增加时,Watcher 可以自动地扩展函数实例数量,以确保有足够的资源来处理请求。
Prometheus(监控):
- 作用: 用于收集和存储系统和函数的监控数据。
- 描述: Prometheus 是一个开源的监控和警报工具,用于收集和存储时间序列数据。OpenFaaS 集成了 Prometheus,以便用户可以监控函数的性能、资源使用情况等指标,并通过 Prometheus 的查询语言进行分析。
Alertmanager(警报管理器):
- 作用: 处理 Prometheus 收集的告警,并触发相应的操作。
- 描述: Alertmanager 用于管理 Prometheus 收集的告警信息。它可以配置为发送通知、执行脚本等,以响应系统中发生的事件。通过 Alertmanager,用户可以及时了解系统中的问题并采取适当的措施。
NATS(消息传递):
- 作用: 提供事件驱动的消息传递机制。
- 描述: OpenFaaS 使用 NATS(可用于代替 Kafka 或其他消息队列)作为事件驱动的消息传递系统。当函数完成处理请求时,它可以发布消息到 NATS,从而触发其他函数或系统中的相关操作。
Kubernetes(容器编排):
- 作用: OpenFaaS 基于 Kubernetes 提供容器编排和管理。
- 描述: OpenFaaS 利用 Kubernetes 提供的容器编排功能来管理函数的部署、伸缩和运行。Kubernetes 提供了一个强大的基础设施,使得 OpenFaaS 可以在各种环境中运行,并提供高度可扩展性和弹性。
这些模块共同工作,使得 OpenFaaS 成为一个灵活且强大的 Serverless 平台,适用于构建和运行无服务器应用程序。
Kubernetes下部署
helm repo add openfaas https://openfaas.github.io/faas-netes/
kubectl create namespace openfaas
# 先下载模板
helm pull openfaas/openfaas --untar
修改这个 values.yaml 文件
# ingress configuration
ingress:
enabled: false
## For k8s >= 1.18 you need to specify the pathType
## See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#better-path-matching-with-path-types
#pathType: ImplementationSpecific
# Used to create Ingress record (should be used with exposeServices: false).
hosts:
- host: gateway.openfaas.local # Replace with gateway.example.com if public-facing
serviceName: gateway
servicePort: 8080
path: /
annotations:
kubernetes.io/ingress.class: nginx
tls:
# Secrets must be manually created in the namespace.
然后再部署
helm upgrade --install openfaas ./openfaas --namespace openfaas -f values.yaml
获取 OpenFaaS 的初始密码: 使用以下命令获取 OpenFaaS 管理员密码。
kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode
访问 OpenFaaS